#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
    
sbit rs=P2^5;  // 指令/数据选择
sbit rw=P2^6;  // 读/写选择
sbit e=P2^7;   // e由1到0，执行指令

void delay(uint t);
void write_com(uchar com); //写指令函数
void write_dat(uchar dat); //写数据函数
void init();  // 初始化

void main()
{
    init();
    write_com(0x80);//设置字符显示位置，就是第一行，第一列
    write_dat('A');  //写入字符"A", 或者写成 write_dat(0x41); write_dat(65);
		write_com(0x81);
		write_dat('B');
		write_com(0x82);
		write_dat('B');
		write_com(0x83);
		write_dat('B');
		write_com(0x84);
		write_dat('B');	
    while(1);        //一直显示下去
}

void write_com(uchar com) ////写指令函数
{
    rs=0;        //选择指令寄存器
    rw=0;        //选择写操作
    P1=com;      //让P1口的8个脚获取指令参数
    delay(100); 
    e=1;         //e由1到0，执行指令
    delay(100);
    e=0;
}
void write_dat(uchar dat)
{
    rs=1;         //选择数据寄存器
    rw=0;         //选择写操作
    P1=dat;       //让P1口的8个脚获取数据参数
    delay(100);
    e=1;
    delay(100);
    e=0;
}
void delay(uint t)
{
    while(--t);
}
void init()
{
    write_com(0x38);  //功能设置指令：选择8位总线，两行显示方式，5x8点阵
    write_com(0x0c);  //打开屏幕显示功能，没有光标，也没有结尾闪烁
    write_com(0x06);  //写完字符后，光标右移，屏幕移动
    write_com(0x01);  //清屏 
}